package br.com.hd.util;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import br.com.hd.constantes.Constantes;
import br.com.hd.entity.Chamado;
import br.com.hd.entity.Usuario;
import br.com.hd.jsfUtil.DataUtil;

public class EnviarEmail {
	private String remetente;
	private String destinatario;
	private String smtpHost;
	private String porta;
	private String assunto;
	private Properties propriedades;
	private Session sessao;
	private static String usuario;
	private static String senha;
	private String conteudoDoEmail;

	private static class Autenticacao extends Authenticator {
		public PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(usuario, senha);
		}
	}

	public EnviarEmail() {
	}

	public void enviarEmailChamado(Chamado chamado) {
		String remetente = "novo.helpdesk@ifpr.edu.br";
		String smtpHost = "smtp.gmail.com";
		String porta = "465";
		String usuario = "novo.helpdesk@ifpr.edu.br";
		String senha = "19helpdesk73";

		assunto = "HELP DESK: " + chamado.getAssunto();
		conteudoDoEmail = "\n Assunto: " + chamado.getAssunto().toUpperCase();
		conteudoDoEmail += "\n Departamento: "
				+ chamado.getDepartamento().getDescricao().toUpperCase();
		conteudoDoEmail += "\n Data de Abertura: "
				+ DataUtil.formatDateHour(chamado.getDataInicio());
		conteudoDoEmail += "\n Descrição: " + chamado.getDescricao();
		conteudoDoEmail += "\n Status: " + chamado.getStatus().getDescricao();
		if (chamado.getDataFim() != null) {
			conteudoDoEmail += "\n Data de Fechamento: "
					+ DataUtil.formatDateHour(chamado.getDataFim());
		}
		if (chamado.getResposta() != null) {
			conteudoDoEmail += "\n Resposta: " + chamado.getResposta();
			conteudoDoEmail += "\n Repondido por: "
					+ chamado.getResponsavel().getNome();
		}
		conteudoDoEmail += "\n \n E-mail automático por favor não responder!";

		try {
			@SuppressWarnings("unused")
			EnviarEmail enviar = new EnviarEmail(remetente, chamado
					.getUsuario().getEmail(), assunto, smtpHost, porta,
					usuario, senha, conteudoDoEmail);
		} catch (Exception e) {
			System.err.println(e);
		}
	}

	public void enviarEmailUsuario(Usuario novoUsuario, String senhaSemMD5) {
		String remetente = "novo.helpdesk@ifpr.edu.br";
		String smtpHost = "smtp.gmail.com";
		String porta = "465";
		String usuario = "novo.helpdesk@ifpr.edu.br";
		String senha = "19helpdesk73";

		assunto = "HELP DESK ";
		conteudoDoEmail = "\n Seu usuário no sistema HELP DESK é: "
				+ novoUsuario.getEmail();
		conteudoDoEmail += "\n E sua senha é: " + senhaSemMD5;
		conteudoDoEmail += "\n Por favor, troque sua senha no primeiro acesso." ;

		conteudoDoEmail += "\n \n O Help Desk é uma ferramenta de controle de solicitações (chamados) para suporte e resolução de problemas técnicos, informática, telefonia e tecnologias de informação.";
		conteudoDoEmail += "\n  SEMPRE utilize o Help Desk, como principal meio de contactar a DTIC com suas solicitações.";
		conteudoDoEmail += "\n	1-) O Help Desk, proporcionará a você a facilidade de acompanhar o andamento de seus chamados, até a sua completa conclusão.";
		conteudoDoEmail += "\n  2-) Após abrir um Novo Chamado, sua solicitação será encaminhada automaticamente ao Departamento selecionado.";
		conteudoDoEmail += "\n  3-) Você poderá acompanhar através do Help Desk no item Meus Chamados e/ou pelos e-mail recebidos, sempre que houver, algo de novo sobre sua solicitação.";
		conteudoDoEmail += "\n  4-) Acompanhe  o Status da sua solicitação até o final.";
		conteudoDoEmail += "\n  5-) Sempre responda os questionários de conclusão de chamado para que a DTIC possa aperfeiçoar cada vez mais seus processos de atendimento";

		conteudoDoEmail += "\n \n Para acessar o Help Desk clique " +Constantes.URL;
		conteudoDoEmail += "\n \n E-mail automático por favor não responder!";
		try {
			@SuppressWarnings("unused")
			EnviarEmail enviar = new EnviarEmail(remetente,
					novoUsuario.getEmail(), assunto, smtpHost, porta, usuario,
					senha, conteudoDoEmail);
		} catch (Exception e) {
			System.err.println(e);
		}
	}

	@SuppressWarnings("static-access")
	public EnviarEmail(String remetente, String destinatario, String assunto,
			String smtpHost, String porta, String usuario, String senha,
			String conteudoDoEmail) {
		this.remetente = remetente;
		this.destinatario = destinatario;
		this.assunto = assunto;
		this.smtpHost = smtpHost;
		this.porta = porta;
		this.usuario = usuario;
		this.senha = senha;
		this.conteudoDoEmail = conteudoDoEmail;
		this.propriedades = System.getProperties();
		this.propriedades.put("mail.smtp.host", this.smtpHost);
		this.propriedades.put("mail.smtp.auth", "true");
		this.propriedades.put("mail.debug", "false");
		this.propriedades.put("mail.smtp.debug", "false");
		this.propriedades.put("mail.smtp.port", this.porta);
		this.propriedades.put("mail.smtp.starttls.enable", "false");
		this.propriedades.put("mail.smtp.socketFactory.port", this.porta);
		this.propriedades.put("mail.smtp.socketFactory.fallback", "false");
		this.propriedades.put("mail.smtp.socketFactory.class",
				"javax.net.ssl.SSLSocketFactory");
		this.propriedades.put("mail.smtp.user", "novo.helpdesk@ifpr.edu.br");
		Authenticator auth = new Autenticacao();
		this.sessao = Session.getDefaultInstance(this.propriedades, auth);
		try {
			Message mensagem = new MimeMessage(this.sessao);
			mensagem.setSubject(this.assunto);
			mensagem.setFrom(new InternetAddress(this.remetente));
			mensagem.addRecipient(Message.RecipientType.TO,
					new InternetAddress(this.destinatario));
			mensagem.setText(this.conteudoDoEmail);
			Transport.send(mensagem);
		} catch (Exception err) {
			System.out.println("Erro ao enviar mensagem");
		}
	}

}